//{ "allowAliases": "in-unions-and-intersections" }
// primitives
type Foo = 'a' | 'b';

type Foo = string | string[];

type Foo = string & string[];

type Foo = `a-${number}` & `b-${number}`;

type Foo = `a-${number}` | `b-${number}`;

// reference types
interface Bar {}
class Baz implements Bar {}

type Foo = Bar | Baz;
type Foo = Bar & Baz;
type Foo = 'a' | 'b';
type Foo = 'a' | 'b' | 'c';
type Foo = 'a' & 'b';
type Foo = 'a' & 'b' & 'c';
type Foo = 'a' | ('b' & 'c');
type Foo = 1 | 2;
type Foo = 1 | 2 | 3;
type Foo = 1 & 2;
type Foo = 1 & 2 & 3;
type Foo = 1 | (2 & 3);
type Foo = `a-${number}` | `b-${number}`;
type Foo = `a-${number}` | `b-${number}` | `c-${number}`;
type Foo = `a-${number}` & `b-${number}`;
type Foo = `a-${number}` & `b-${number}` & `c-${number}`;
type Foo = `a-${number}` | (`b-${number}` & `c-${number}`);
type Foo = true | false;
type Foo = true & false;
interface Bar {}
type Foo = Bar | string;
interface Bar {}
type Foo = Bar & string;
type Foo = string | string[];
type Foo = string | string[] | number;
type Foo = string & string[];
type Foo = string & string[] & number;

